package com.greate.community.entity;

import lombok.AccessLevel;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.util.HashMap;
import java.util.Map;

/**
 * 事件实体类
 * 用于封装系统通知相关的事件信息
 * 采用链式调用设计模式
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
public class Event {

    /**
     * 事件类型
     */
    private String topic;
    
    /**
     * 事件触发者的用户ID
     */
    private int userId;
    
    /**
     * 实体类型
     */
    private int entityType;
    
    /**
     * 实体ID
     */
    private int entityId;
    
    /**
     * 实体作者的用户ID（通知接收者）
     */
    private int entityUserId;
    
    /**
     * 事件附加数据
     * 用于存储可能需要用到的额外数据
     */
    private Map<String, Object> data = new HashMap<>();

    /**
     * 设置事件附加数据
     * 
     * @param key 数据键
     * @param value 数据值
     * @return 当前事件对象，支持链式调用
     */
    public Event setData(String key, Object value) {
        this.data.put(key, value);
        return this;
    }
    
    // Lombok @Data和@Accessors(chain = true)注解自动生成getter和链式setter方法
}
